package com.zrm.zfcrpa.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class DateUtils {
	
	/**
	 * 获取所需格式的当前时间
	 * 日期格式化 日期格式为：yyyy-MM-dd
	 * @param pattern  格式，如：DateUtils.DATE_TIME_PATTERN
	 * @return  返回yyyy-MM-dd格式日期
	 */
	public static Date getCurrentDate(String pattern) {
		Date date = new Date();
		SimpleDateFormat df = new SimpleDateFormat(pattern);
		try {
			date = df.parse(df.format(date));
		} catch (ParseException e) {
			return null;
		}
		return date;
	}
	
	
	/**
	 * 将Date格式化为所需格式的Date
	 * @param date  日期
	 * @param pattern  格式，如：DateUtils.DATE_TIME_PATTERN
	 * @return  返回yyyy-MM-dd格式日期
	 */
	public static Date formatDateToDate(Date date, String pattern) {
		if(date != null){
			SimpleDateFormat df = new SimpleDateFormat(pattern);
			try {
				return df.parse(df.format(date));
			} catch (ParseException e) {
				return null;
			}
		}
		return null;
	}
	
	/**
	 * 将Date转化为所需格式字符串
	 * @param String  日期的字符串格式
	 * @param pattern  格式，如：DateUtils.DATE_TIME_PATTERN
	 * @return  返回yyyy-MM-dd格式日期
	 */
	public static String formatDateToString(Date date, String pattern) {
		if(date != null){
			SimpleDateFormat df = new SimpleDateFormat(pattern);
			return df.format(date);
		}
		return null;
	}
	
	/**
	 * 将字符串转化为所需格式Date
	 * @param String  日期的字符串格式
	 * @param pattern  格式，如：DateUtils.DATE_TIME_PATTERN
	 * @return  返回yyyy-MM-dd格式日期
	 */
	public static Date formatStringToDate(String date, String pattern) {
		if(date != null){
			SimpleDateFormat df = new SimpleDateFormat(pattern);
			try {
				return df.parse(date);
			} catch (ParseException e) {
				return null;
			}
		}
		return null;
	}
	
	/**
	 * 获取与当前时间相距固定分钟的时间
	 * @param int  分钟数
	 * @param String  加或减  枚举值：“add” 或  “sub”
	 * @param pattern  格式，如：DateUtils.DATE_TIME_PATTERN
	 */
	public static String format5Date(int iminute, String arithmetic, String pattern){
		Calendar calender = Calendar.getInstance();
		if("add".equals(arithmetic)){
		   calender.set(Calendar.MINUTE, calender.get(Calendar.MINUTE) + iminute);
		}else if("sub".equals(arithmetic)){
		   calender.set(Calendar.MINUTE, calender.get(Calendar.MINUTE) - iminute);
		}
		SimpleDateFormat df = new SimpleDateFormat(pattern);
		return df.format(calender.getTime());
	}
	
	/**
	 * 获取日期几天后的时间
	 */
	public static Date addAndSubtractDaysByCalendar(Date dateTime/*待处理的日期*/,int n/*加减天数*/){
        Calendar calstart = Calendar.getInstance();
		calstart.setTime(dateTime);
		calstart.add(Calendar.DATE, n);
		return calstart.getTime();
	}


	/**
	 * 比较两个时间，若startDate小于endDate则返回true
	 * @param startDate
	 * @param endDate
	 * @return
	 * @throws ParseException 
	 */
	public static boolean compareTime(Date startDate,Date endDate) throws ParseException {
		long startTime = startDate.getTime();
		long endTime = endDate.getTime();
		return endTime-startTime>0?true:false;
	}
	
	//两个时间相隔的天数
	public static long getTimeDiff(Date startTime, Date endTime) {
		long day = 0;
		long startTimeInt = startTime.getTime();
		long endTimeInt = endTime.getTime();
		// 结束时间-开始时间 = 天数
		day = (endTimeInt - startTimeInt) / (24 * 60 * 60 * 1000);
		return day;
	}
	
	/**
	 * 判断字符串是否可以转换成对应的日期格式
	 * @param str 待检测的字符串
	 * @param pattern 日期格式
	 * @return 
	 */
	public static boolean isValidDate(String str,String pattern){
		boolean result = true;
		String regex = "([0-9]{4})\\-(([0]{1}[1-9]{1})|([1]{1}[0-2]{1}))\\-(([0]{1}[1-9]{1})|([1-2]{1}[0-9]{1})|([3]{1}[0-1]{1}))";
		if(!str.matches(regex)){
			result = false;
		}
		SimpleDateFormat df = new SimpleDateFormat(pattern);
		try{
			df.setLenient(false);
			df.parse(str);
		}catch(ParseException e){
			result = false;
		}
        return result;
	}
}
